<?php

/*
 * HTML
 */
class html{
    private $header,$body,$footer,$opts;
    
    /**
     *
     * @param type $opts
     * Array Asociativo con ruta a respectivos archivos
     * ["header"]["body"]["footer"]
     * 4to. elemento [opcional] Array Key=>Value con palabras a reemplazar
     * ["reemplazar"] -> {"{!palabraXXX}" => "otra palabra"}
     */
    public function __construct($opts) {
        if ( !$this->OptsOk($opts) ) throw new Exception("Opciones invalidas, lease javadoc del constructor clase Html.");
        
        if (file_exists($opts["header"]) && file_exists($opts["body"]) && file_exists($opts["footer"])){
            $this->header = file_get_contents($opts["header"]);
            $this->body = file_get_contents($opts["body"]);
            $this->footer = file_get_contents($opts["footer"]);
            $this->opts = $opts;
        }else{
            throw new Exception("Archivos Template no encontrado/s.");
        }
    }
    
    /**
     *
     * @param type $s 
     * ruta del script y/o css, cualquier cosa que se desee agregar en el header
     * formato html puro. (ej. <script type....>xxx</script> o <LINK .....>
     */
    public function agregarScript($s){
        $posicionDelHeader = stripos($this->header, "</HEAD>");
        if ( $posicionDelHeader == false ) throw new Exception("Template Header no posee etiqueta <HEAD>");
        $this->header = str_ireplace("</HEAD>", $s."</HEAD>", $this->header);        
    }
    
    public function imprimir(){
        if ( isset($this->opts["reemplazar"]) ) $this->reemplazar();
        //seteo el namespace que utilizara el front end
        $this->setNameSpace();
        echo $this->header.$this->body.$this->footer;
    }
    
    private function reemplazar(){
        $reemplazo = $this->opts["reemplazar"];        
        foreach ($reemplazo as $actual => $nuevo){
            $this->header = str_replace($actual, $nuevo, $this->header);
            $this->body = str_replace($actual, $nuevo, $this->body);
            $this->footer = str_replace($actual, $nuevo, $this->footer);
        }
    }
    
    private function OptsOk($opts){
        return isset($opts["header"]) && isset($opts["body"]) && isset($opts["footer"]);
    }
    
    private function setNameSpace(){
        $this->agregarScript('<script type="text/javascript">var namespace = {"response":"","aux":{}};</script>');
    }
}
?>
